<?php

declare(strict_types=1);
/**
 * This file is part of Hyperf.
 *
 * @link     https://www.hyperf.io
 * @document https://hyperf.wiki
 * @contact  group@hyperf.io
 * @license  https://github.com/hyperf/hyperf/blob/master/LICENSE
 */
namespace HyperfTest\Cases;

use App\Constants\ErrorCode;
use App\Service\Redis\SmsCollection;
use App\Service\SmsService;
use GuzzleHttp\Client;
use Hyperf\Guzzle\CoroutineHandler;
use Hyperf\Redis\Redis;
use HyperfTest\HttpTestCase;

/**
 * @internal
 * @coversNothing
 */
class SmsTest extends HttpTestCase
{
    public function testCaptcha()
    {
        $client = new Client([
            'handler' => new CoroutineHandler(),
            'base_uri' => 'http://127.0.0.1:9501',
        ]);
        $response = $client->get('/captcha?id=123');
        $this->assertSame('image/jpeg', $response->getHeaderLine('Content-Type'));

        $code = di()->get(Redis::class)->get('sms:captcha:123');
        $this->assertSame($code, di()->get(SmsCollection::class)->getCaptcha('123'));
        $this->assertTrue(di()->get(SmsService::class)->checkCaptcha('123', $code));
    }

    public function testSend()
    {
        $res = $this->json('/sms/send', [
            'id' => '123',
        ]);

        $this->assertSame(ErrorCode::PARAMS_INVALID, $res['code']);

        $code = di()->get(SmsCollection::class)->getCaptcha('123');

        $res = $this->json('/sms/send', [
            'id' => '123',
            'mobile' => '18678010000',
            'captcha' => $code,
        ]);

        $this->assertSame(0, $res['code']);
        $this->assertTrue($res['data']['sended']);
    }
}
